﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ENT.GP.Core;
using ENT.GP.Core.Lookup;
using System.Configuration;
using Ext.Net;
using System.Collections;
using ENT.GP.Core.Proyecto;
using ENT.GP.Core.Core;
using entgpguayas.Code;

public partial class Proyectos_Perfiles_wucPerfiles : ControlesUsuario
{

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack )
        {
            SectorLookup.InvalidateCache();
            RegionLookup.InvalidateCache();
            PoblacionAfectadaLookup.InvalidateCache();
            sPoblacionAfectada.DataSource = PoblacionAfectadaLookup.GetNameValueList(IdEmp);
            sPoblacionAfectada.DataBind();
            sRegion.DataSource = RegionLookup.GetNameValueList(ConfigurationManager.AppSettings.Get("CodigoRegionSenplades").ToString(), 0);
            sRegion.DataBind();
            sSectores.DataSource = SectorLookup.GetNameValueList(IdEmp);
            sSectores.DataBind();
            //Inicializar Tipo para utilizar btn save
            TipoLookup.InvalidateCache();
            TipoLookup.GetNameValueList(IdEmp);
            //
            cbxEjes.FieldLabel = ManejadorRecursos.GetRecurso("LblEje");
            cbxPrograma.FieldLabel = ManejadorRecursos.GetRecurso("LblPrograma");
            WinPerfilProyecto.Hide();
        }
    }
    /// <summary>
    /// Muestra la ventana de Creacion de un nuevo perfil de Proyecto
    /// </summary>
    /// <param name="Operacion">Operacion que se realizara</param>
    public void Show(string Operacion)
    {
        Show(Operacion, 0);
    }
    /// <summary>
    /// Invoca metodo para actualizar datos de la grid
    /// </summary>
    private static void CallRefreshGridParent()
    {
        X.Js.AddScript("#{StoreProyectos}.load();");
    }
    /// <summary>
    /// Muestra la ventana para la modificacion de un nuevo perfil de proyecto
    /// </summary>
    /// <param name="Operacion">Operacion que se realizara</param>
    /// <param name="Id">Id del Perfil del Proyecto</param>
    public void Show(string Operacion, int Id)
    {
        TabPanel1.SetActiveTab(0);
        if (Operacion == "Editar" || Operacion=="Eliminar")
        {
            this.hidAccion.SetValue(Operacion);
            this.hidIdPerfilProyecto.SetValue(Id);
            Proyecto objProyecto = Proyecto.GetProyecto(Id);
            txtNombreProyecto.SetValue(objProyecto.Nombre);
            txaDescripcion.SetValue(objProyecto.DescripcionAdicional);
            
            cbxEjes.SetValue(objProyecto.Eje);
            cbxPrograma.SetValue(objProyecto.Programa);
            nufCosto.Number = objProyecto.CostoTotal;
            nufDuracion.Number = objProyecto.DuracionProy;
            nfNHabitantes.Number = objProyecto.NumeroHabitantes;

            txtLatitud.Number = (objProyecto.Latitud);
            txtLongitud.Number = (objProyecto.Longitud);
            sRegion.DataSource = RegionLookup.GetNameValueList(ConfigurationManager.AppSettings.Get("CodigoRegionSenplades").ToString(), this.IdEmp);
            sRegion.DataBind();
            CargarCantones(objProyecto.Provincia);
            CargarProvincias(objProyecto.Region);

            cbxRegion.SetValue(objProyecto.Region);
            cbxProvincia.SetValue(objProyecto.Provincia);
            cbxCanton.SetValue(objProyecto.Canton);
            txtParroquia.SetValue(objProyecto.Parroquia);
            //
            sPoblacionAfectada.DataSource = PoblacionAfectadaLookup.GetNameValueList(IdEmp);
            sPoblacionAfectada.DataBind();
            cbxPoblacionAfectada.SetValue(objProyecto.PoblacionAfectada);
           
            //
            if (objProyecto.Dictamen == "SI")
            {
                radSi.SetValue(true);
                radNo.SetValue(false);
            

            }
            else
            {
                radSi.SetValue(false);
                radNo.SetValue(true);
            }
            StoreDocumentos.DataSource = objProyecto.DocumentosPerfil;
            StoreDocumentos.DataBind();
            StoreDocumentosDP.DataSource = objProyecto.DocumentosPerfilDictamen;
            StoreDocumentosDP.DataBind();
           
          
          
            StoreSector.RemoveAll();
            StoreSector.DataSource = objProyecto.Sectores;
            StoreSector.DataBind();
            sSectores.RemoveAll();
            sSectores.DataSource = SectorLookup.GetNameValueList(this.IdEmp);
            sSectores.DataBind();

            var listaSectores = objProyecto.Sectores.Select(ps => ps.SectorId);
            String sectores = "";
            foreach (var listaSectore in listaSectores)
            {
                sectores = string.Format("{0},{1}",sectores,listaSectore);
            }
            sectores =(sectores.Length!=0)? sectores.Substring(1):"";
            cbSector.SetValue(sectores);

            if (Operacion=="Eliminar")
            {
                btnGuardar.Hide();
                btnEliminar.Show();
                btnEDP.Hide();
            }
            else
            {
                btnGuardar.Show();
                btnEliminar.Hide();
                btnEDP.Show();
            }
        }
        else if (Operacion == "Nuevo")
        {
            LimpiarFormulario();
            btnEliminar.Hide();
            btnGuardar.Show();
            btnEDP.Show();
            this.hidAccion.Text = Operacion;
            this.hidIdPerfilProyecto.SetValue("0");
        }
       
        WinPerfilProyecto.Show();
    }
    protected void btnEliminar_Click(object sender, DirectEventArgs e)
    {
        
        try
        {
            var vIdPerfil = e.ExtraParams["hidIdPerfilProyecto_prm_e"];//hidIdPerfilProyecto.Text
            int iIdPerfil = 0;
            int.TryParse(vIdPerfil, out iIdPerfil);
            var proyecto = Proyecto.GetProyecto(iIdPerfil);
            proyecto.Delete();
            proyecto = proyecto.Save();
            X.Msg.Show(new MessageBoxConfig
            {
                Title = "Creacion del Perfil",
                Message = "El Perfil del proyecto se elimino correctamente",
                Buttons = MessageBox.Button.OK,
                Icon = MessageBox.Icon.INFO
            });
            CallRefreshGridParent();
            LimpiarFormulario();
            WinPerfilProyecto.Hide();
        }
        catch (Exception ex)
        {
            X.Msg.Show(new MessageBoxConfig
            {
                Buttons = MessageBox.Button.OK,
                Icon = MessageBox.Icon.ERROR,
                Title = "Fallo",
                Message = "Ocurrio un error al eliminar Perfil"
            });
            Util.RegistarLog(ex.ToString());
        }
    }
    protected void btnGuardar_Click(object sender, DirectEventArgs e)
    {
        string DocP, DocDP, DocVT, Sectores;
        
        bool ovt=false, odp=false;
        try
        {
            int iRegion = 0;
            int iProvincia = 0;
            int iCanton = 0;
            double dLatitud = 0;
            double dLongitud = 0;
            double costo; int duracion;
            int iEje = 0,iPrograma = 0,numHab=0;
            var vIdPerfil = e.ExtraParams["hidIdPerfilProyecto_prm"];//hidIdPerfilProyecto.Text
            int iIdPerfil = 0;
            int.TryParse(vIdPerfil, out iIdPerfil);

            var tiposP = TipoLookup.GetNameValueList(this.IdEmp);
            DocP       = e.ExtraParams["DocumentosP"];
            DocDP      = e.ExtraParams["DocumentosDP"];
            //DocVT      = e.ExtraParams["DocumentosVT"];
            Sectores   = e.ExtraParams["Sectores"];
            double.TryParse(e.ExtraParams["nufCosto_prm"], out  costo);
            int.TryParse(e.ExtraParams["nufDuracion_prm"], out  duracion);
            Proyecto proyecto;

            
         
            //
            if (e.ExtraParams["hidAccion_prm"] == "Editar")//this.hidAccion.Text
            {
                proyecto = Proyecto.GetProyecto(iIdPerfil);//hidIdPerfilProyecto.Text
            }
            else
            {
                proyecto = Proyecto.NewProyecto();
                proyecto.FechaInicio = null;
                proyecto.FechaFin    = null;
                proyecto.IDEmpresa   = this.IdEmp;//Campo Adicional

            }
            //Datos Generales
            proyecto.Nombre = e.ExtraParams["txtNombreProyecto_prm"];//txtNombreProyecto.Text;
            proyecto.DescripcionAdicional = e.ExtraParams["txaDescripcion_prm"];//txaDescripcion.Text;
            proyecto.Tipo = tiposP[1].Key;

            proyecto.CostoTotal = costo;
            proyecto.DuracionProy  = duracion;

            proyecto.Observacion = "";
            proyecto.Estado      = 279;

            //Datos Localizacion      //proyecto.Pais = cbxPais.SelectedIndex;
            
            double.TryParse(e.ExtraParams["txtLatitud_prm"], out dLatitud);
            proyecto.Latitud = dLatitud;

            double.TryParse(e.ExtraParams["txtLongitud_prm"], out dLongitud);
            proyecto.Longitud = dLongitud;
            
            int.TryParse(e.ExtraParams["cbxRegion_prm"],out iRegion);
            proyecto.Region = iRegion;

            int.TryParse(e.ExtraParams["cbxProvincia_prm"], out iProvincia);
            proyecto.Provincia = iProvincia;

            int.TryParse(e.ExtraParams["cbxCanton_prm"], out iCanton);
            proyecto.Canton = iCanton;


            proyecto.Parroquia = e.ExtraParams["txtParroquia_prm"];//txtParroquia.Text;
          
                       
            //Sector Estartegico
            StoreDataHandler sdhSectores = new StoreDataHandler(Sectores);
            ChangeRecords<ProyectoSector> crSectores = sdhSectores.ObjectData<ProyectoSector>();
            foreach (var sector in crSectores.Deleted)
            {
                int indice = proyecto.Sectores.IndexOf(proyecto.Sectores.FirstOrDefault(x => x.Id == sector.Id));
                if (indice!=-1)
                {
                    proyecto.Sectores.RemoveAt(indice);
                }
                
            }
            foreach (var sector in crSectores.Created)
            {
                proyecto.Sectores.Add(sector);
            }

            int.TryParse(e.ExtraParams["cbxEjes_prm"], out iEje);
            proyecto.Eje      = iEje;//cbxEjes.SelectedItem.Value
            int.TryParse(e.ExtraParams["cbxPrograma_prm"], out iPrograma);
            proyecto.Programa = iPrograma;//cbxPrograma.SelectedItem.Value

            //Area Poblacion Afectada
            proyecto.PoblacionAfectada = Convert.ToInt32(e.ExtraParams["cbxPoblacionAfectada_prm"]);//cbxPoblacionAfectada.SelectedItem.Value
            int.TryParse(e.ExtraParams["nfNHabitantes_prm"], out numHab);
            proyecto.NumeroHabitantes = numHab;
           
            //Documentos del perfil
            StoreDataHandler sdhDocP = new StoreDataHandler(DocP);
            ChangeRecords<DocumentoPerfil> crDocp = sdhDocP.ObjectData<DocumentoPerfil>();

            foreach (var doc in crDocp.Deleted)
            {
                int indice = proyecto.DocumentosPerfil.IndexOf(proyecto.DocumentosPerfil.FirstOrDefault(x => x.Id == doc.Id));
                proyecto.DocumentosPerfil.RemoveAt(indice);
            }

            foreach (var docp in crDocp.Created)
            {
                proyecto.DocumentosPerfil.Add(docp);
            }

            //Datos del Dictamen de Prioridad del perfil
            if (radSi.Checked)
            {
                proyecto.Dictamen = "SI";
                odp = true;
            }
            if (radNo.Checked)
            {
                proyecto.Dictamen = "NO";
                odp = false;
            }

            //Documentos del Dictamen de Prioridad del perfil
            StoreDataHandler sdhDocDP = new StoreDataHandler(DocDP);
            ChangeRecords<DocumentoPerfilDictamen> crsdhDocDP = sdhDocDP.ObjectData<DocumentoPerfilDictamen>();

            foreach (var doc in crsdhDocDP.Deleted)
            {
                int indice = proyecto.DocumentosPerfilDictamen.IndexOf(proyecto.DocumentosPerfilDictamen.FirstOrDefault(x => x.Id == doc.Id));
                proyecto.DocumentosPerfilDictamen.RemoveAt(indice);
            }

            foreach (DocumentoPerfilDictamen docdp in crsdhDocDP.Created)
            {
                proyecto.DocumentosPerfilDictamen.Add(docdp);
            }

            
            proyecto = proyecto.Save();
            if (hidAccion.Text=="Editar")
            {
                
                if (odp)
                {
                   RegistrarNotificacion(proyecto.IDProyecto, string.Format("El proyecto {0} ya tiene Dictamen de Prioridad", proyecto.Nombre), "Dictamen de Prioridad");
                }
            }
            else
            {
                if (hidAccion.Text == "Nuevo")
                {
                    RegistrarNotificacion(proyecto.IDProyecto,string.Format("El perfil de proyecto {0} fue creado", proyecto.Nombre), "Creación de Nuevo Perfil de Proyecto");
                }
                if (odp)
                {
                    RegistrarNotificacion(proyecto.IDProyecto, string.Format("El proyecto {0} ya tiene Dictamen de Prioridad", proyecto.Nombre), "Dictamen de Prioridad");
                }
            }
            //Invocar methodo de ventana padre
            //((Proyectos_Perfiles_Perfiles)this.Page).BindDataSearch();
            X.Msg.Show(new MessageBoxConfig
            {
                Title = "Creacion del Perfil",
                Message = "El Perfil del proyecto se guardo correctamente",
                Buttons = MessageBox.Button.OK,
                Icon = MessageBox.Icon.INFO
            });
            LimpiarFormulario();

           // var gd = this.Parent.FindControl("gpPerfilProyecto'");
            CallRefreshGridParent();
            WinPerfilProyecto.Hide();
        }
        catch (Exception ex)
        {
            X.Msg.Show(new MessageBoxConfig
            {
                Buttons = MessageBox.Button.OK,
                Icon = MessageBox.Icon.ERROR,
                Title = "Fallo",
                Message = "Ocurrio un error al guardar Perfil, revise que todo los campos esten completos"
            });
            Util.RegistarLog(ex.ToString());
        }
    }
    void RegistrarNotificacion(int idProyecto,string nombre,string accion)
    {
        int idRol;
        int.TryParse(Session["IdRol"].ToString(), out idRol);
        var notificaViabilidad = ENT.GP.Core.Tareas.Tareas.NuevaTarea();
        notificaViabilidad.IdProyecto = idProyecto;
        notificaViabilidad.Nombre = accion;
        notificaViabilidad.Descripcion = nombre;
        notificaViabilidad.Fecha = DateTime.Now;
        notificaViabilidad.IdRol = idRol;
        notificaViabilidad=notificaViabilidad.Save();
    }

    #region "Muestra el listado de la Ubicacion : Provincias y Cantones"

    protected void CantonRefresh(object sender, StoreRefreshDataEventArgs e)
    {
        try
        {
            CargarCantones(Convert.ToInt32(cbxProvincia.SelectedItem.Value));
        }
        catch { }

    }
    protected void ProvinciaRefresh(object sender, StoreRefreshDataEventArgs e)
    {
        try
        {
            CargarProvincias(Convert.ToInt32(cbxRegion.SelectedItem.Value));
        }
        catch { }
    }
    private void CargarCantones(int Id)
    {
        CantonLookup.InvalidateCache();
        this.sCanton.DataSource = CantonLookup.GetNameValueList(Id);
        this.sCanton.DataBind();
    }
    private void CargarProvincias(int Id)
    {
        ProvinciaLookup.InvalidateCache();
        this.sProvincia.DataSource = ProvinciaLookup.GetNameValueList(Id);
        this.sProvincia.DataBind();
    }

    #endregion

    #region "Manejo de operaciones con Archivos: Agregar, Quitar del Perfil"

    protected void CommandVer_Click(object sender, DirectEventArgs e)
    {
        try
        {
            //string ruta = string.Format("{0}{1}", UtilP.RUTA_ARCHIVOS, e.ExtraParams["Nombre"]);
            string ruta = string.Format("{0}{1}", UtilP.RUTA_ARCHIVOS, e.ExtraParams["Nombre"]);
            winVerArchivo.LoadContent(ruta);
            winVerArchivo.SetTitle(e.ExtraParams["Nombre"]);

            winVerArchivo.Show();
        }
        catch (Exception ex)
        {
            Util.RegistarLog(ex.ToString());
        }
    }

    public void SubirArchivo_Click(object sender, DirectEventArgs e)
    {
        string mensaje = "";
        try
        {
            string nombre = "";
            nombre = fufArchivosPP.PostedFile.FileName;
            nombre = UtilP.FormarNombre(nombre);

            fufArchivosPP.PostedFile.SaveAs(MapPath(string.Format("~/{0}{1}", ConfigurationManager.AppSettings.Get("PathFiles"), nombre)));
            fufArchivosPP.SetValue(nombre);

            if (this.fufArchivosPP.HasFile)
            {
                mensaje = string.Format("Subido el archivo Correctamente: {0}<br/>Size: {1} bytes", this.fufArchivosPP.PostedFile.FileName, this.fufArchivosPP.PostedFile.ContentLength);
                UtilP.MostrarNotificacion(mensaje, "Subir Archivo", MessageBox.Icon.INFO);

                hiTipoDoc.SetValue(this.fufArchivosPP.PostedFile.ContentType);
                hiTamano.SetValue(this.fufArchivosPP.PostedFile.ContentLength);
                hiRuta.SetValue(nombre);
                hiTipo.SetValue(txtTipoDocumento.Text);
            }
            else
                UtilP.MostrarNotificacion("Archivo no fue subido!!!", "Subir Archivo", MessageBox.Icon.ERROR);
        }
        catch 
        {
            UtilP.MostrarNotificacion("Archivo no fue subido!!!", "Subir Archivo", MessageBox.Icon.ERROR);
        }
    }

    public void SubirArchivoDP_Click(object sender, DirectEventArgs e)
    {
        string mensaje = "Subido el archivo Correctamente: {0}<br/>Size: {1} bytes";
        try
        {
            string nombre = "";
            nombre = fufArchivosDP.PostedFile.FileName;
            nombre = UtilP.FormarNombre(nombre);
            fufArchivosDP.PostedFile.SaveAs(MapPath(string.Format("~/{0}{1}", ConfigurationManager.AppSettings.Get("PathFiles"), nombre)));
            fufArchivosDP.SetValue(nombre);
            if (this.fufArchivosDP.HasFile)
            {
                mensaje = string.Format("Subido el archivo Correctamente: {0}<br/>Size: {1} bytes", this.fufArchivosDP.PostedFile.FileName, this.fufArchivosDP.PostedFile.ContentLength);
                UtilP.MostrarNotificacion(mensaje, "Subir Archivo", MessageBox.Icon.INFO);

                hiTipoDocDP.SetValue(this.fufArchivosDP.PostedFile.ContentType);
                hiTamanoDP.SetValue(this.fufArchivosDP.PostedFile.ContentLength);
                hiRutaDP.SetValue(nombre);
                hiTipoDP.SetValue(txtTipoDocumentoDP.Text);
            }
            else
                UtilP.MostrarNotificacion("Archivo no fue subido!!!", "Subir Archivo", MessageBox.Icon.ERROR);

            fufArchivosDP.Reset();
            txtTipoDocumentoDP.Text = "";
            RadioGroup4.Reset();
        }
        catch (Exception)
        {
            UtilP.MostrarNotificacion("Archivo no fue subido!!!", "Subir Archivo", MessageBox.Icon.ERROR);
        }

    }
    /// <summary>
    /// Limpia el formulario
    /// </summary>
    void LimpiarFormulario()
    {
        txtNombreProyecto.Reset();
        txtNombreProyecto.SetValue("");

        txaDescripcion.Reset();
        txaDescripcion.SetValue("");

        nufCosto.Reset();
        nufCosto.SetValue("");

        nufDuracion.Reset();
        nufDuracion.SetValue("");

        nfNHabitantes.Reset();
        nfNHabitantes.SetValue("");

        cbSector.Reset();
        cbSector.SetValue("");

        cbxPoblacionAfectada.Reset();
        cbxPoblacionAfectada.SetValue("");

        cbxRegion.Reset();
        cbxRegion.SetValue("");

        cbxProvincia.Reset();
        cbxProvincia.SetValue("");

        cbxPrograma.Reset();
        cbxPrograma.SetValue("");

        txtLatitud.Reset();
        txtLatitud.SetValue("");

        txtLongitud.Reset();
        txtLongitud.SetValue("");


        cbxEjes.Reset();
        cbxEjes.SetValue("");
        
        cbxCanton.Reset();
        cbxCanton.SetValue("");

        txtParroquia.Reset();
        txtParroquia.SetValue("");

        StoreDocumentosDP.RemoveAll();
        StoreDocumentos.RemoveAll();
        //
        txtTipoDocumento.Reset();
        //fufArchivosPP.Reset();
       

    }
    public void btnCancelar_Click(object sender, DirectEventArgs e)
    {
        LimpiarFormulario();
        WinPerfilProyecto.Hide();
    }

    #endregion
}

